#include<stdio.h>

// 将字符串翻转得到正确的进制转换数
  void strrev(char result[], int len)
    {
    char *p=result, *q=result+len-1;
     while (p < q) {
        int temp = *p;
        *p = *q;
        *q = temp;
        p++;
        q--;
    }
  }

//进制转换函数 
void decimalToR1(int n,int r,char result[]){
    int i=0;
    while(n!=0){
        int rem=n%r; //余数
        if(rem<10){
            result[i++]=rem+'0'; //转换为数字字符
        }
         else {
        result[i++] = rem - 10 + 'A'; // 转换为大写字母字符
        }
       
       n=n/r;
    }
    result[i]='\0';//字符串最后结束符加上

     strrev(result,i);
}

// 也可以这样来写 用字符数组取值引用，也就是一个字符串常量"0123456789ABCDEF"  
void decimalToR2(int n,int r,char result[]){
  int k=0,d;
   while(n!=0){
    d=n%r; //余数
    result[k]="0123456789ABCDEF"[d];
    k++;
    n=n/r;
   }
   result[k]='\0'; //字符串结束符
  strrev(result,k);
}

  
   int main(){
    int n=2019; //原数
    int r=16; //转换进制
    char result[100]; //存储数组
    decimalToR1(n,r,result);
    printf("%d in base %d is %s\n",n,r,result);
    return 0;
    
    } 
   